home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr08 / frchkdoc.zip / FRCHK.DOC < prev   
Text File  |  1993-06-17  |  18KB  |  449 lines

  1.  
  2.     ===================>  FRCHK TEST <==================================
  3.  
  4.     =================== Operational details ============================
  5.  
  6.     *** Where FRCHK looks for PAF data ***
  7.  
  8.     FRCHK is invoked by typing "frchk" at the MS-DOS command prompt.
  9.     By default, FRCHK looks in the current drive and directory (the same
  10.     one you would see if you did a DOS "dir" command) for PAF data.  If
  11.     you want to check data in a drive or directory other than the current
  12.     one, you have three options:
  13.  
  14.     1) Type the name of the drive or directory on the command line
  15.        after "frchk".  If you type a directory name, it MUST be 
  16.        followed by a trailing slash.  Examples:
  17.  
  18.        C>frchk            (checks current directory)
  19.  
  20.        C>frchk A:            (checks data on drive A)
  21.  
  22.        C>frchk \paf\        (checks data in "\paf" directory)
  23.  
  24.     2) Use MS-DOS commands to change the default drive and directory
  25.        to the one you want before running FRCHK.  Then type "frchk"
  26.        without arguments.
  27.  
  28.     3) Use "config" to change the default data path to the one you
  29.        want.  Note that if you do this, FRCHK will always look in
  30.        that same path unless you override the default by typing in a
  31.        command line argument.
  32.  
  33.     *** Where FRCHK creates scratch files ***
  34.  
  35.     During several phases of FRCHK a scratch file may need to be created.
  36.     By default, FRCHK creates scratch files in the current directory.
  37.     You change the default scratch path using "config", or you may
  38.     specify a scratch path from the command line by using the "-s" option.
  39.     To use this option you type "-s" followed by a scratch path (with
  40.     a trailing slash if the path is a directory).  Examples:
  41.  
  42.     C>frchk -sA:        (puts scratch files on drive A)
  43.  
  44.     C>frchk -s\temp\    (puts scratch files in directory \temp)
  45.  
  46.     Note that there is NO SPACE after the "-s".
  47.  
  48.     *** Suppressing informational messages (-q) ***
  49.  
  50.     Not all messages issued by FRCHK are errors.  Some are merely 
  51.     informational, or tell you what FRCHK is doing at the moment.  If you
  52.     want FRCHK to suppress these informational messages, use the "-q"
  53.     option (meaning "quiet").  With this option set, the only message
  54.     you will see is the sign on message telling where FRCHK is looking
  55.     and the date and time, unless FRCHK finds errors.  Errors are reported
  56.     regardless of whether the "-q" flag is set.
  57.  
  58.     *** Saving error messages ***
  59.  
  60.     If you want to save the output from FRCHK, you may use MS-DOS
  61.     re-direction commands as follows:
  62.  
  63.     1) A single right arrow followed by a file name will create a
  64.        file by that name (destroying any previous file by the same name),
  65.        and store all FRCHK messages there.
  66.  
  67.     2) A double right arrow followed by a file name will append FRCHK
  68.        messages to the end of that file without destroying its previous
  69.        contents.
  70.  
  71.     Examples:
  72.  
  73.     frchk > frchk.lst    (Creates "frchk.lst" and store messages there)
  74.  
  75.     frchk >> frchk.lst    (Appends messages to the end of "frchk.lst")
  76.  
  77.     *** Stopping and starting screen output ***
  78.  
  79.     If you are not re-directing output to a file as described above, you
  80.     may stop and start FRCHK check output using the Control-S key.
  81.  
  82.     *** Printing FRCHK messages ***
  83.  
  84.     There are 3 ways to print the output from FRCHK:
  85.  
  86.     1) Re-direct the output directly to the printer. 
  87.  
  88.        frchk > LPT1:
  89.  
  90.     2) Re-direct output to a file and then print it later.
  91.  
  92.        frchk > frchk.lst
  93.        print frchk.lst
  94.  
  95.     3) Use the Control-P key to turn on printing at the same time
  96.        that messages are being written to the screen.  This is a toggle
  97.        key which turns printer output on and off.
  98.  
  99.     =================== End of file check ==============================
  100.  
  101.     *** The following checks are performed on each of the Family
  102.     *** Records files:
  103.     - indiv2.dat
  104.     - marr2.dat
  105.     - name2.dat
  106.     - notes2.dat
  107.     - namadd2.dat
  108.     - reptitl2.dat
  109.     *** If any of the first three programs cannot be opened, FRCHK aborts
  110.     *** without doing further checking.
  111.  
  112.     * The number of record count in each file header should be less than
  113.       or equal to 65,535.  If so, the following message is printed to
  114.       show how many records are in the file:
  115.     -> "%s: Contains %ld record(s)." 
  116.                     or        (if above 65,535)
  117.     -> "%s: Invalid number of records (%ld) - 65535 assumed."
  118.  
  119.     * The first 21 bytes of each file header should be in the following
  120.       format:
  121.     - The first byte must be a space.
  122.     - The next twenty bytes must be either spaces or numeric digits.
  123.     - The 10 bytes after the first byte, when taken as an ASCII
  124.       number (with a space terminating the number), form the record
  125.       count.  This number should be less than or equal to 65,535.
  126.     - The next 10 bytes when taken as an ASCII number (with a space 
  127.       terminating the number), form the free list header.
  128.       .  This number should be less than or equal to 65,535, and
  129.       less than or equal to the record count.
  130.     -> "%s: File header may be corrupted." 
  131.  
  132.     * The number of physical records in the file is calculated based on the
  133.       actual size of the file and compared to the logical record count stored
  134.       in the file header, which should be the same.
  135.     -> "%s: File size indicates there are %ld record(s).",
  136.  
  137.     ============= Individual file pointer and data range tests ==============
  138.  
  139.     * The following pointers are checked to make sure they do not point beyond
  140.       end of file:
  141.         ptr name        file it points to
  142.     "Surname",        Name
  143.     "Given name 1",     Name
  144.     "Given name 2",     Name
  145.     "Given name 3",     Name
  146.     "Title",        Name
  147.     "Birth place 1",    Name
  148.     "Birth place 2",    Name
  149.     "Birth place 3",    Name
  150.     "Birth place 4",    Name
  151.     "Christen place 1", Name
  152.     "Christen place 2", Name
  153.     "Christen place 3", Name
  154.     "Christen place 4", Name
  155.     "Death place 1",    Name
  156.     "Death place 2",    Name
  157.     "Death place 3",    Name
  158.     "Death place 4",    Name
  159.     "Burial place 1",   Name
  160.     "Burial place 2",   Name
  161.     "Burial place 3",   Name
  162.     "Burial place 4",   Name
  163.     "Baptism temple",   Name
  164.     "Endowment temple", Name
  165.     "Sealing temple",   Name
  166.     "Older sibling",    Individual
  167.     "Own marriage",     Marriage
  168.     "Parents marriage", Marriage
  169.     "Notepad",        Notes
  170.  
  171.     -> "RIN = %u, %s pointer out of range: %u."
  172.  
  173.     * Each of the following dates in the individual file is checked for 
  174.       reasonableness:
  175.  
  176.     "birth"
  177.     "christen"
  178.     "death"
  179.     "burial"
  180.     "baptism"
  181.     "endowment"
  182.     "sealing"
  183.  
  184.       If the year is less than 100 or greater than 2000, or if the month
  185.       value is greater than 24 (values 13 through 24 have special meaning
  186.       in PAF), or if the day of the month is greater than appropriate
  187.       for the specified month (29 Feb is always allowed), one of the
  188.       following messages will occur:
  189.  
  190.     -> "RIN = %u, bad %s date: year = %u."
  191.     -> "RIN = %u, bad %s date: month = %d."
  192.     -> "RIN = %u, bad %s date: day = %d when month = %d."
  193.  
  194.     * The sex field is checked to make sure it is null, a space,
  195.       or 'M' or 'F'.
  196.     -> "RIN = %u, bad sex field: '%c' (%02x hex)."
  197.  
  198.     * An individual should not have an older sibling pointer unless he has a
  199.       parent's marriage pointer.
  200.     -> "RIN %u has older sibling %u, but no parent's marriage."
  201.  
  202.     * An individual should not have an individual marriage pointer and a
  203.       parent's marriage pointer that are the same.
  204.     -> "RIN %u has same ptr for individual and parent's marriage: %u"
  205.  
  206.     ============= Marriage file pointer and data range tests ==============
  207.  
  208.     * The following pointers are checked to make sure they do not point beyond
  209.       end of file:
  210.         ptr name        file it points to
  211.     "Husband",            Individual
  212.     "Wife",             Individual
  213.     "Child",            Individual
  214.     "W to H sealing temple",    Name
  215.     "Husband's other marriage", Marriage
  216.     "Wife's other marriage",    Marriage
  217.  
  218.     -> "MRIN = %u, %s pointer out of range: %u."
  219.  
  220.     * Each of the following dates in the marriage file is checked for 
  221.       reasonableness:
  222.  
  223.     "marriage"
  224.     "wife to husband sealing"
  225.  
  226.       If the year is less than 100 or greater than 2000, or if the month
  227.       value is greater than 24 (values 13 through 24 have special meaning
  228.       in PAF), or if the day of the month is greater than appropriate
  229.       for the specified month (29 Feb is always allowed), one of the
  230.       following messages will occur:
  231.  
  232.     -> "MRIN = %u, bad %s date: year = %u."
  233.     -> "MRIN = %u, bad %s date: month = %d."
  234.     -> "MRIN = %u, bad %s date: day = %d when month = %d."
  235.  
  236.     * The divorce field is checked to make sure it is null, a space,
  237.       or 'Y' or 'N'.
  238.     -> "MRIN = %u, bad divorce field: '%c' (%02x hex)."
  239.  
  240.     * A marriage record should not have a husband's other marriage pointer
  241.       unless it also has a husband pointer.  Similarly, it should not have
  242.       a wife's other marriage pointer unless it has a wife pointer.
  243.     -> "MRIN %u has husband's other marriage ptr (%u) but no husband."
  244.                     or
  245.     -> "MRIN %u has wife's other marriage ptr (%u) but no wife."
  246.  
  247.     ================== Name file integrity tests =======================
  248.  
  249.     * Each name record should have a trailing null in the data portion.
  250.     -> "Name record %u, name = "%s""
  251.     -> "    No trailing null character."
  252.  
  253.     * The data portion of each name record should be printable ASCII
  254.       characters up to the trailing null character.
  255.     -> "Name record %u, name = "%s""
  256.     -> "    Non-ASCII characters in name."
  257.  
  258.     * Each name found during the traversal should be lexically greater
  259.       than the previous one.
  260.     -> "Name record %u, name = "%s""
  261.     -> "    Out of order in tree."
  262.     -> "    Previous tree record is %u, name = "%s""
  263.  
  264.     * During the traversal, each name record should be visited only once.
  265.       If a record is encountered that has already been visited, the
  266.       following message is displayed:
  267.     -> "Multiple path to name record %u"
  268.  
  269.     * Each of the two links in the binary name tree should be null or point
  270.       within the name file.
  271.     -> "Name record = %u, left link out of range: %u."
  272.                     or
  273.     -> "Name record = %u, right link out of range: %u."
  274.  
  275.     * Every record in the name file should have been visited during the
  276.       tree traversal.
  277.     -> "There are %u records not linked in the name tree."
  278.  
  279.     * If any errors are found that affect the integrity of the binary tree,
  280.       the following message is displayed to indicate that the name file needs
  281.       to be re-built:
  282.     -> "===> Name file internal pointers are not consistent! <===\n");
  283.     
  284.     * The following informational message is issued to indicate the maximum 
  285.       depth of the name tree:
  286.     -> "Maximum depth of name tree is %d\n", max_tree_depth);
  287.  
  288.  
  289.     ================== Free list integrity checks ======================
  290.  
  291.     *** Both the individual file and the marriage file use a free list
  292.     *** scheme for keeping track of deleted records.  
  293.     
  294.     * The free list header should point within the file.
  295.     -> "Bad RIN free list header: %ld"
  296.                     or
  297.     -> "Bad MRIN free list header: %ld"
  298.  
  299.     * All links in the free list should point to records within the file.
  300.     -> "RIN #%u has bad free list pointer: %ld" 
  301.                     or
  302.     -> "MRIN #%u has bad free list pointer: %ld" 
  303.  
  304.     * The free list should not loop back onto itself.
  305.     -> "Deleted RIN chain is an endless loop."
  306.                     or
  307.     -> "Deleted MRIN chain is an endless loop."
  308.  
  309.     * All of the records on the free list should be marked as deleted.
  310.     -> "The following RINs are on the free list but not deleted:"
  311.                     or
  312.     -> "The following MRINs are on the free list but not deleted:"
  313.  
  314.     * All deleted records should be on the free list.
  315.     -> "The following RINs are deleted but not on the free list:"
  316.                     or
  317.     -> "The following MRINs are deleted but not on the free list:"
  318.  
  319.     ================= Note chain cross-link tests ======================
  320.  
  321.     * All notepad pointers within the individual file or in the note file
  322.       should point within the note file.
  323.     -> "RIN = %u, notepad pointer out of range: %u." 
  324.                     or
  325.     -> "Note record = %u, notepad pointer out of range: %u." 
  326.  
  327.     * No note record should be pointed to from more than one place, i.e.,
  328.       from an individual record or another note record.
  329.     -> "Individual %u is cross-linked to note %u." 
  330.                     or
  331.     -> "Note %u is cross-linked to note %u." 
  332.  
  333.     * There should be no note records that are not pointed to by an
  334.       individual record or another note record.
  335.     -> "Note record %u is not linked into any note chain."
  336.                     or
  337.     -> "Note records %u through %u are not linked into any note chain."
  338.  
  339.     =================== Sibling chain tests  ===========================
  340.  
  341.     * Any marriage record with a youngest child pointer should have a
  342.       corresponding individual (the child) pointing back with its
  343.       parent's marriage pointer.
  344.     -> "MRIN %u has dangling child ptr: %u"
  345.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  346.  
  347.     * There should be no more than 30 children (20 on the Apple) pointing
  348.       to a particular marriage record with their parent's marriage ptr.
  349.     -> "Too many parent's marriage ptrs pointing to MRIN %u:"
  350.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  351.  
  352.     * No individual parent's marriage ptr should point at a deleted marriage.
  353.     -> "Found dangling ptrs pointing to deleted MRIN %u" 
  354.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  355.  
  356.     * The chain of siblings pointing to a particular parent's marriage
  357.       should not be a loop.
  358.     -> "Bad sibling chain starting at MRIN %u, child ptr %u"
  359.     -> "The chain is an endless loop."
  360.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  361.  
  362.     * All members of a sibling chain should point back to the same parent's
  363.       marriage.
  364.     -> "Bad sibling chain starting at MRIN %u, child ptr %u"
  365.     -> "RIN %u parent's marriage ptr does not point back."
  366.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  367.  
  368.     * All individual pointing to the same parent's marriage should be part
  369.       of the associated sibling chain.
  370.     -> "Bad sibling chain starting at MRIN %u, child ptr %u"
  371.     -> "The following RINs were not found in the children chain:"
  372.     -> "The following RINs have parent's marriage ptrs to MRIN %u" 
  373.  
  374.     * None of the children in a sibling chain should be the husband or the
  375.       wife of their parent's marriage.
  376.     -> "MRIN %u has a child that is also the husband: %u"
  377.                     or
  378.     -> "MRIN %u has a child that is also the wife: %u"
  379.  
  380.     =================== Marriage chain tests ===========================
  381.  
  382.     *** The following tests apply only to marriage records that are
  383.     *** pointed to by an individual record (individual marriage ptr),
  384.     *** or are part of a husband or wife other marriage chain (which
  385.     *** must begin with a marriage record pointed to by an individual
  386.     *** marriage pointer.
  387.  
  388.     * Individual marriage pointers should not point to deleted marriage
  389.       records.
  390.     -> "MRIN %u has been deleted."        (only if MRIN deleted)
  391.     -> "Dangling individual marriage ptrs to MRIN %u found in these RINs:"
  392.  
  393.     * Marriage records pointed to by an individual marriage pointer should
  394.       point back with either the husband or wife pointer.
  395.     -> "Dangling individual marriage ptrs to MRIN %u found in these RINs:"
  396.  
  397.     * When an individual record points to a marriage record which points back
  398.       with the husband ptr, the sex of the individual record should be male.
  399.     -> "Husband in MRIN %u (RIN %u) not male, sex = '%c'"
  400.  
  401.     * When an individual record points to a marriage record which points back
  402.       with the wife ptr, the sex of the individual record should be female.
  403.     -> "Wife in MRIN %u (RIN %u) not female, sex = '%c'"
  404.  
  405.     * Other marriage chains should not loop back onto themselves.
  406.     -> "Husband's other marriage chain from MRIN %u is an endless loop."
  407.                     or
  408.     -> "Wife's other marriage chain from MRIN %u is an endless loop."
  409.  
  410.     * No other marriage ptr should point to a deleted marriage.
  411.     -> "MRIN %u husband other marriage ptr points to deleted MRIN %u"
  412.                     or
  413.     -> "MRIN %u wife other marriage ptr points to deleted MRIN %u"
  414.  
  415.     * The marriages in an other marriage chain should all have the
  416.       same husband or wife ptr.
  417.     -> "Multiple husbands in other marriage chain:"
  418.     -> "    MRIN %u, husband = %u"
  419.     -> "    MRIN %u, husband = %u"
  420.                     or
  421.     -> "Multiple wifes in other marriage chain:"
  422.     -> "    MRIN %u, wife = %u"
  423.     -> "    MRIN %u, wife = %u"
  424.  
  425.     * Other marriage chains of the same type (i.e. husband or wife)  should 
  426.       not overlap.  I.e., there should be no cross-links between such chains.  
  427.     -> "Husband's other marriage chain from MRIN %u cross-linked at MRIN %u"
  428.                     or
  429.     -> "Wife's other marriage chain from MRIN %u cross-linked at MRIN %u"
  430.     
  431.     * There should be no more than 60 marriages (20 for the Apple) in an other
  432.       marriage chain.
  433.     -> "Found %d marriages in husband's other marriage chain from MRIN %u."
  434.                     or
  435.     -> "Found %d marriages in wife's other marriage chain from MRIN %u."
  436.  
  437.     * Any marriage records which are not part of a husband's marriage chain
  438.       should not have a husband pointer or a husband's other marriage ptr.
  439.     -> "MRIN %u has dangling husband ptr: %u"
  440.                     or
  441.     -> "MRIN %u has dangling husband's other marriage ptr: %u"
  442.  
  443.     * Any marriage records which are not part of a wife's marriage chain
  444.       should not have a wife pointer or a wife's other marriage ptr.
  445.     -> "MRIN %u has dangling wife ptr: %u"
  446.                     or
  447.     -> "MRIN %u has dangling wife's other marriage ptr: %u"
  448.  
  449.